跳到主要内容

MyBatis 通用 Mapper 使用

虽然现在已经没啥人用这个了,但是为了以后方便,这里还是记录一下这个工具的使用方法

参考资料 官方文档 MyBatis 通用 Mapper 参考资料 MyBatis 为什么需要通用 Mapper ?

添加配置

依赖下载地址 Mybatis 通用 Mapper Jar 集成

添加 Maven 依赖或引入 Jar 包,注意通用 Mapper 需要借助 JPA 中的元数据注释

<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<!-- 建议使用最新版本,最新版本请从项目首页查找 -->
<version>x.x.x</version>
</dependency>

<!-- 引入 JPA 以便使用注解 -->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>

配置 Bean 以便引入这个插件~

MapperHelper mapperHelper = new MapperHelper();
//特殊配置
Config config = new Config();
//具体支持的参数看后面的文档
config.setXXX(XXX);
//设置配置
mapperHelper.setConfig(config);
// 注册自己项目中使用的通用Mapper接口,这里没有默认值,必须手动注册
mapperHelper.registerMapper(Mapper.class);
//配置完成后,执行下面的操作
mapperHelper.processConfiguration(session.getConfiguration());

配置实体类

这里可以使用 代码生成器来自动生成,这里为了简单,直接手写 Entity 了

注意:这里的 @Id 这种注解就是来自上面的 JPA 包,具体有哪些注解可以参考 Java JPA 规范那篇笔记

public class Country implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@KeySql(useGeneratedKeys = true)
private Long id;
private String countryname;
private String countrycode;

//setter 和 getter 方法
}

在上面类中,给主键添加了 @Id,标记该字段为数据库主键。还有一个通用 Mapper 的特殊注解 @KeySql,配置的 useGeneratedKeys = true 和 MyBatis 中的 useGeneratedKeys 含义相同,意思是说使用 JDBC 的方式获取数据库自增的主键值。

注意:该类对应数据表为 country,因为类名和数据库名对应(当前数据库忽略大小写),因此不需要在类上添加 @Table(name = "country")

经过上面简单的配置后,相当于就有了 MyBatis 中的 <resultMap> 关系映射了,特别注意,这个映射关系只对通用 Mapper 有效,自己手写方法时,需要自己处理映射关系。这部分的详细内容参考文档:对象关系映射

创建 Mapper 接口

根据上述实体类,创建对应的 CountryMapper 接口如下:

import tk.mybatis.mapper.common.Mapper;

public interface CountryMapper extends Mapper<Country> {

}

这里继承了 tk.mybatis.mapper.common.Mapper 接口,在接口上指定了泛型类型 Country。当继承了 Mapper 接口后,此时就已经有了针对 Country 的大量方法,方法如下:

配置通用 Mapper

为了让上述方法可以直接使用,还需要配置通用 Mapper,让项目在启动的时候,把上述方法都自动生成好,这样在运行时就可以使用上面所有的方法。

具体配置参考 1.3 Spring Boot 集成

如果你需要对通用 Mapper 进行配置,你可以在 Spring Boot 的配置文件中配置 mapper. 前缀的配置。

mapper:
mappers:
- tk.mybatis.mapper.common.Mapper
- tk.mybatis.mapper.common.Mapper2
notEmpty: true

编写启动类

注意这里的 @MapperScan 是 tk 包里面的

import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan(basePackages = {"com.alsritter.goodsservice.dao"})
public class GoodsApplication {
public static void main(String[] args) {
SpringApplication.run(GoodsApplication.class);
}
}